package ModelLayer;

import java.util.*;
/**
 * VareContainer er containeren, hvor alle varene bliver opbevaret
 * 
 * @author Zohdi
 * @version (a version number or a date)
 */
public class VareContainer
{
    private static  VareContainer instance;
    private ArrayList<Vare> varer;

    private VareContainer()
    {
        varer = new ArrayList<Vare>();
    }

    /**
     * Singleton konstruktør der laver en instans af VareContainer hvis ingen findes
     */
    public static VareContainer getInstance()
    {
        if(instance == null)
        {
            instance = new VareContainer();
        }
        return instance;
    }

    /**
     *  Tilføjer en ny vare i arrayet varer
     *  
     *  @param navn navnet på varen
     *  @param beskrivelse beskrivelse af varen
     *  @param pris prisen på varen
     *  @param rabat rabatten på varen
     */
    public void addVare(String navn, String beskrivelse, double pris, double rabat)
    {
        if(findVare(navn, 0) == null)
        {
            varer.add(new Vare(navn, beskrivelse, pris, rabat));
        }
    }

    /**
     *  tjekker først om de indtastede strings er tomme
     *  da oplysninger ikke skal opdateres til tomme parametre
     *  På grund af dette blive setter metoder først kaldt når der er tjekket om stringen
     *  
     *  @param navn navnet på varen
     *  @param beskrivelse beskrivelse af varen
     *  @param pris prisen på varen
     *  @param rabat rabatten på varen
     *  
     *  @return successful 
     */
    public boolean setVare(String navn, String nytNavn, String beskrivelse, double pris, double rabat)
    {
        boolean successful = false;
        Vare vare = findVare(navn,0);
        if(navn != null)
        {
            vare.setNavn(nytNavn);
        }
        if(beskrivelse != null)
        {
            vare.setBeskrivelse(beskrivelse);
        }
        if(pris != 0)
        {
            vare.setPris(pris);
        }
        if(rabat != 0)
        {
            vare.setRabat(rabat);
        }
        if(vare.getNavn().equals(nytNavn) && vare.getRabat() == rabat && vare.getBeskrivelse().equals(beskrivelse) && vare.getPris() == pris)        
        {
            successful = true;
        }
        return successful;
    }

    /**
     * 
     */
    public boolean removeVare(String navn)
    {
        boolean found = false;
        Vare vare = findVare(navn,0);
        if(vare != null)
        {
            varer.remove(vare);
            found = true;
        }
        return found;
    }

    public void addEksemplarer(String navn, int antal)
    {
        findVare(navn,0).addEksemplarer(antal);
    }

    public Vare findVare(String navn, int antal)
    {
        Vare vare, retur = null; int i = 0; boolean found = false;
        while(!found && i < varer.size())
        {
            if(navn.equals(varer.get(i).getNavn()))
            {
                vare = varer.get(i);
                if(vare.hasEksemplar() && antal > 0)
                {
                    retur = new Vare(vare);
                    if(vare.getAntal() > antal)
                    {
                        retur.setEksemplarer(vare.getEksemplarer(antal));
                    }
                    else
                    {
                        retur.setEksemplarer(vare.getEksemplarer(antal));
                    }
                }
                else
                {
                    retur = vare;
                }
                found = true;
            }
            i++;
        }
        return retur;
    }
}
